"""
模块名称：example_Gt36528.py
作者：Lionel.Zhang
创建时间：2025 - 11 - 05
最后修改时间：2025 - 11 - 05
功能描述：GI5516 光敏电阻传感器驱动示例程序
"""
from misc import ADC
import utime as time

# 光敏电阻GT36528驱动类
# 电阻单位：欧姆（Ω），GT36528的阻值范围通常为10kΩ~1MΩ（随光照变化）
class Gt36528(object):
    """
    GT36528光敏电阻传感器类
    通过ADC读取光敏电阻的电压值，并转换为电阻值
    """

    def __init__(self, adc_dev, adcn):
        """
        初始化GT36528光敏电阻
        
        Args:
            adc_dev: ADC设备对象
            adcn: ADC通道编号
        """
        self.adc = adc_dev      # ADC设备实例
        self._adcn = adcn       # ADC通道号
    
    def _voltage_to_resistance(self, volt):
        """
        将电压值转换为电阻值
        
        Args:
            volt: 读取到的电压值(mV)
            
        Returns:
            计算得到的光敏电阻阻值(Ω)
        """
        # 电路参数设置
        Vcc = 3300      # 电源电压，单位mV (3.3V)
        R_series = 10000  # 分压电路中的串联电阻值，单位Ω (10kΩ)
        
        # 分压电路计算光敏电阻值
        # 公式: R_light = (Vcc - V_adc) * R_series / V_adc
        if volt == 0:
            return float('inf')  # 防止除以零错误，返回无穷大
        resistance = (Vcc - volt) * R_series / volt
        return resistance
    
    def read_volt(self):
        """
        读取ADC电压值
        
        Returns:
            读取到的电压值(mV)
        """
        volt = self.adc.read(self._adcn)  # 从指定ADC通道读取电压
        return volt
    
    def read(self):
        """
        读取光敏电阻的阻值
        
        Returns:
            光敏电阻的阻值(Ω)
        """
        volt = self.read_volt()              # 读取电压值
        resistance = self._voltage_to_resistance(volt)  # 转换为电阻值
        return resistance


# 主程序入口
if __name__ == "__main__":
    # 创建ADC设备实例
    AdcDevice = ADC()
    
    # 创建GT36528光敏电阻实例，使用ADC0通道
    gt36528 = Gt36528(AdcDevice, ADC.ADC0)
    
    # 连续读取10次光敏电阻值
    for i in range(10):
        resistance = gt36528.read()  # 读取电阻值
        print("GT36528光敏电阻阻值为 {0}Ω".format(resistance))
        time.sleep(1)  # 每次读取间隔1秒
    
    # 程序结束提示
    print("测量结束。")